{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Implementation of Vanilla GANs model\n",
    "Reference: https://arxiv.org/pdf/1406.2661.pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Run the comment below only when using Google Colab\n",
    "# !pip install torch torchvision"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from torch.utils.data import DataLoader\n",
    "from torchvision import datasets\n",
    "from torchvision import transforms\n",
    "from torchvision.utils import save_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import datetime\n",
    "import os, sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from matplotlib.pyplot import imshow, imsave\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "MODEL_NAME = 'VanillaGAN'\n",
    "DEVICE = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def get_sample_image(G, n_noise):\n",
    "    \"\"\"\n",
    "        save sample 100 images\n",
    "    \"\"\"\n",
    "    z = torch.randn(100, n_noise).to(DEVICE)\n",
    "    y_hat = G(z).view(100, 28, 28) # (100, 28, 28)\n",
    "    result = y_hat.cpu().data.numpy()\n",
    "    img = np.zeros([280, 280])\n",
    "    for j in range(10):\n",
    "        img[j*28:(j+1)*28] = np.concatenate([x for x in result[j*10:(j+1)*10]], axis=-1)\n",
    "    return img"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Discriminator(nn.Module):\n",
    "    \"\"\"\n",
    "        Simple Discriminator w/ MLP\n",
    "    \"\"\"\n",
    "    def __init__(self, input_size=784, num_classes=1):\n",
    "        super(Discriminator, self).__init__()\n",
    "        self.layer = nn.Sequential(\n",
    "            nn.Linear(input_size, 512),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.Linear(512, 256),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.Linear(256, num_classes),\n",
    "            nn.Sigmoid(),\n",
    "        )\n",
    "    \n",
    "    def forward(self, x):\n",
    "        y_ = x.view(x.size(0), -1)\n",
    "        y_ = self.layer(y_)\n",
    "        return y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Generator(nn.Module):\n",
    "    \"\"\"\n",
    "        Simple Generator w/ MLP\n",
    "    \"\"\"\n",
    "    def __init__(self, input_size=100, num_classes=784):\n",
    "        super(Generator, self).__init__()\n",
    "        self.layer = nn.Sequential(\n",
    "            nn.Linear(input_size, 128),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.Linear(128, 256),\n",
    "            nn.BatchNorm1d(256),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.Linear(256, 512),\n",
    "            nn.BatchNorm1d(512),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.Linear(512, 1024),\n",
    "            nn.BatchNorm1d(1024),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.Linear(1024, num_classes),\n",
    "            nn.Tanh()\n",
    "        )\n",
    "        \n",
    "    def forward(self, x):\n",
    "        y_ = self.layer(x)\n",
    "        y_ = y_.view(x.size(0), 1, 28, 28)\n",
    "        return y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n_noise = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D = Discriminator().to(DEVICE)\n",
    "G = Generator(n_noise).to(DEVICE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "transform = transforms.Compose([transforms.ToTensor(),\n",
    "                                transforms.Normalize(mean=[0.5],\n",
    "                                std=[0.5])]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mnist = datasets.MNIST(root='../data/', train=True, transform=transform, download=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data_loader = DataLoader(dataset=mnist, batch_size=batch_size, shuffle=True, drop_last=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "criterion = nn.BCELoss()\n",
    "D_opt = torch.optim.Adam(D.parameters(), lr=0.0002, betas=(0.5, 0.999))\n",
    "G_opt = torch.optim.Adam(G.parameters(), lr=0.0002, betas=(0.5, 0.999))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "max_epoch = 50 # need more than 10 epochs for training generator\n",
    "step = 0\n",
    "n_critic = 1 # for training more k steps about Discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D_labels = torch.ones(batch_size, 1).to(DEVICE) # Discriminator Label to real\n",
    "D_fakes = torch.zeros(batch_size, 1).to(DEVICE) # Discriminator Label to fake"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "if not os.path.exists('samples'):\n",
    "    os.makedirs('samples')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0/50, Step: 100, D Loss: 1.1755154132843018, G Loss: 0.8270020484924316\n",
      "Epoch: 0/50, Step: 200, D Loss: 1.4079020023345947, G Loss: 0.8065428137779236\n",
      "Epoch: 0/50, Step: 300, D Loss: 1.2308564186096191, G Loss: 1.0008032321929932\n",
      "Epoch: 0/50, Step: 400, D Loss: 1.2088241577148438, G Loss: 0.5426709651947021\n",
      "Epoch: 0/50, Step: 500, D Loss: 1.3081212043762207, G Loss: 1.6697196960449219\n",
      "Epoch: 0/50, Step: 600, D Loss: 1.2405954599380493, G Loss: 1.3488750457763672\n",
      "Epoch: 0/50, Step: 700, D Loss: 1.1216254234313965, G Loss: 1.313636302947998\n",
      "Epoch: 0/50, Step: 800, D Loss: 0.9928608536720276, G Loss: 1.1896991729736328\n",
      "Epoch: 0/50, Step: 900, D Loss: 1.055720329284668, G Loss: 1.3114458322525024\n",
      "Epoch: 1/50, Step: 1000, D Loss: 1.1775424480438232, G Loss: 1.30094313621521\n",
      "Epoch: 1/50, Step: 1100, D Loss: 1.2202109098434448, G Loss: 0.6925904154777527\n",
      "Epoch: 1/50, Step: 1200, D Loss: 1.0529544353485107, G Loss: 0.7519501447677612\n",
      "Epoch: 1/50, Step: 1300, D Loss: 1.221968412399292, G Loss: 1.4080226421356201\n",
      "Epoch: 1/50, Step: 1400, D Loss: 0.9282263517379761, G Loss: 1.214267611503601\n",
      "Epoch: 1/50, Step: 1500, D Loss: 1.0784947872161865, G Loss: 0.8881294131278992\n",
      "Epoch: 1/50, Step: 1600, D Loss: 1.0660274028778076, G Loss: 1.1177875995635986\n",
      "Epoch: 1/50, Step: 1700, D Loss: 1.1025665998458862, G Loss: 0.8640520572662354\n",
      "Epoch: 1/50, Step: 1800, D Loss: 1.1709367036819458, G Loss: 0.948043942451477\n",
      "Epoch: 2/50, Step: 1900, D Loss: 1.1924587488174438, G Loss: 1.425293207168579\n",
      "Epoch: 2/50, Step: 2000, D Loss: 1.1501306295394897, G Loss: 1.6354111433029175\n",
      "Epoch: 2/50, Step: 2100, D Loss: 1.1051888465881348, G Loss: 0.9974076747894287\n",
      "Epoch: 2/50, Step: 2200, D Loss: 1.0171751976013184, G Loss: 1.1399242877960205\n",
      "Epoch: 2/50, Step: 2300, D Loss: 1.044590711593628, G Loss: 1.1417334079742432\n",
      "Epoch: 2/50, Step: 2400, D Loss: 1.084895133972168, G Loss: 0.9973181486129761\n",
      "Epoch: 2/50, Step: 2500, D Loss: 1.211650013923645, G Loss: 0.7276591062545776\n",
      "Epoch: 2/50, Step: 2600, D Loss: 1.1004228591918945, G Loss: 0.9661415219306946\n",
      "Epoch: 2/50, Step: 2700, D Loss: 1.1328953504562378, G Loss: 1.2553675174713135\n",
      "Epoch: 2/50, Step: 2800, D Loss: 1.2243258953094482, G Loss: 0.4585942029953003\n",
      "Epoch: 3/50, Step: 2900, D Loss: 1.313656210899353, G Loss: 1.4691613912582397\n",
      "Epoch: 3/50, Step: 3000, D Loss: 1.1967917680740356, G Loss: 0.4995018243789673\n",
      "Epoch: 3/50, Step: 3100, D Loss: 1.015854835510254, G Loss: 1.2228450775146484\n",
      "Epoch: 3/50, Step: 3200, D Loss: 1.2699724435806274, G Loss: 1.9949824810028076\n",
      "Epoch: 3/50, Step: 3300, D Loss: 1.1024272441864014, G Loss: 1.0257915258407593\n",
      "Epoch: 3/50, Step: 3400, D Loss: 1.1172765493392944, G Loss: 0.7119858860969543\n",
      "Epoch: 3/50, Step: 3500, D Loss: 1.1008734703063965, G Loss: 0.8645107746124268\n",
      "Epoch: 3/50, Step: 3600, D Loss: 1.0376055240631104, G Loss: 1.104860544204712\n",
      "Epoch: 3/50, Step: 3700, D Loss: 1.0405375957489014, G Loss: 0.9409258365631104\n",
      "Epoch: 4/50, Step: 3800, D Loss: 1.0361707210540771, G Loss: 0.8364851474761963\n",
      "Epoch: 4/50, Step: 3900, D Loss: 1.0092402696609497, G Loss: 1.445324420928955\n",
      "Epoch: 4/50, Step: 4000, D Loss: 1.0006499290466309, G Loss: 1.1789973974227905\n",
      "Epoch: 4/50, Step: 4100, D Loss: 1.0804859399795532, G Loss: 0.9085795879364014\n",
      "Epoch: 4/50, Step: 4200, D Loss: 1.085111141204834, G Loss: 0.881885290145874\n",
      "Epoch: 4/50, Step: 4300, D Loss: 1.1210278272628784, G Loss: 1.4989343881607056\n",
      "Epoch: 4/50, Step: 4400, D Loss: 1.1296237707138062, G Loss: 1.3392102718353271\n",
      "Epoch: 4/50, Step: 4500, D Loss: 0.9965386390686035, G Loss: 0.7814934849739075\n",
      "Epoch: 4/50, Step: 4600, D Loss: 1.1139588356018066, G Loss: 1.405811071395874\n",
      "Epoch: 5/50, Step: 4700, D Loss: 1.2562898397445679, G Loss: 1.4301483631134033\n",
      "Epoch: 5/50, Step: 4800, D Loss: 1.1131832599639893, G Loss: 1.4061691761016846\n",
      "Epoch: 5/50, Step: 4900, D Loss: 1.156798243522644, G Loss: 0.8670039772987366\n",
      "Epoch: 5/50, Step: 5000, D Loss: 1.2420905828475952, G Loss: 1.4216547012329102\n",
      "Epoch: 5/50, Step: 5100, D Loss: 1.1334590911865234, G Loss: 0.7568789720535278\n",
      "Epoch: 5/50, Step: 5200, D Loss: 1.144729495048523, G Loss: 0.7903492450714111\n",
      "Epoch: 5/50, Step: 5300, D Loss: 1.20405113697052, G Loss: 0.6338024139404297\n",
      "Epoch: 5/50, Step: 5400, D Loss: 1.0621870756149292, G Loss: 0.898655354976654\n",
      "Epoch: 5/50, Step: 5500, D Loss: 1.2438212633132935, G Loss: 0.6488878130912781\n",
      "Epoch: 5/50, Step: 5600, D Loss: 1.2200028896331787, G Loss: 1.060368299484253\n",
      "Epoch: 6/50, Step: 5700, D Loss: 1.3905291557312012, G Loss: 1.8859131336212158\n",
      "Epoch: 6/50, Step: 5800, D Loss: 1.1803265810012817, G Loss: 0.636593222618103\n",
      "Epoch: 6/50, Step: 5900, D Loss: 1.2205991744995117, G Loss: 1.0332188606262207\n",
      "Epoch: 6/50, Step: 6000, D Loss: 1.1557385921478271, G Loss: 0.8370834589004517\n",
      "Epoch: 6/50, Step: 6100, D Loss: 1.0904375314712524, G Loss: 1.000665545463562\n",
      "Epoch: 6/50, Step: 6200, D Loss: 1.220473051071167, G Loss: 0.577721357345581\n",
      "Epoch: 6/50, Step: 6300, D Loss: 1.2782409191131592, G Loss: 0.8518214225769043\n",
      "Epoch: 6/50, Step: 6400, D Loss: 1.2546086311340332, G Loss: 0.6432516574859619\n",
      "Epoch: 6/50, Step: 6500, D Loss: 1.1899150609970093, G Loss: 0.9383895397186279\n",
      "Epoch: 7/50, Step: 6600, D Loss: 1.0759327411651611, G Loss: 1.0996379852294922\n",
      "Epoch: 7/50, Step: 6700, D Loss: 1.3193247318267822, G Loss: 1.2807385921478271\n",
      "Epoch: 7/50, Step: 6800, D Loss: 1.1709617376327515, G Loss: 0.7328125238418579\n",
      "Epoch: 7/50, Step: 6900, D Loss: 1.0906864404678345, G Loss: 1.6160608530044556\n",
      "Epoch: 7/50, Step: 7000, D Loss: 1.2462618350982666, G Loss: 1.688418984413147\n",
      "Epoch: 7/50, Step: 7100, D Loss: 1.084143042564392, G Loss: 1.1381099224090576\n",
      "Epoch: 7/50, Step: 7200, D Loss: 1.038679599761963, G Loss: 1.0228520631790161\n",
      "Epoch: 7/50, Step: 7300, D Loss: 1.1848900318145752, G Loss: 1.5460665225982666\n",
      "Epoch: 7/50, Step: 7400, D Loss: 1.1382715702056885, G Loss: 1.305546760559082\n",
      "Epoch: 8/50, Step: 7500, D Loss: 1.2787842750549316, G Loss: 0.8592190742492676\n",
      "Epoch: 8/50, Step: 7600, D Loss: 1.0961445569992065, G Loss: 0.7338801622390747\n",
      "Epoch: 8/50, Step: 7700, D Loss: 1.1660144329071045, G Loss: 1.0518360137939453\n",
      "Epoch: 8/50, Step: 7800, D Loss: 1.0629692077636719, G Loss: 0.8936794996261597\n",
      "Epoch: 8/50, Step: 7900, D Loss: 1.1960989236831665, G Loss: 0.8040443658828735\n",
      "Epoch: 8/50, Step: 8000, D Loss: 1.1576998233795166, G Loss: 1.0066142082214355\n",
      "Epoch: 8/50, Step: 8100, D Loss: 1.1493744850158691, G Loss: 1.1755390167236328\n",
      "Epoch: 8/50, Step: 8200, D Loss: 1.1043283939361572, G Loss: 0.9718360304832458\n",
      "Epoch: 8/50, Step: 8300, D Loss: 1.1064872741699219, G Loss: 1.0103259086608887\n",
      "Epoch: 8/50, Step: 8400, D Loss: 1.1597678661346436, G Loss: 1.074366569519043\n",
      "Epoch: 9/50, Step: 8500, D Loss: 1.1302660703659058, G Loss: 0.8727264404296875\n",
      "Epoch: 9/50, Step: 8600, D Loss: 1.3195931911468506, G Loss: 1.1009092330932617\n",
      "Epoch: 9/50, Step: 8700, D Loss: 1.2631933689117432, G Loss: 1.037153959274292\n",
      "Epoch: 9/50, Step: 8800, D Loss: 1.0761170387268066, G Loss: 1.1148347854614258\n",
      "Epoch: 9/50, Step: 8900, D Loss: 1.1202175617218018, G Loss: 0.8647074699401855\n",
      "Epoch: 9/50, Step: 9000, D Loss: 1.1812937259674072, G Loss: 0.9355068206787109\n",
      "Epoch: 9/50, Step: 9100, D Loss: 1.1204715967178345, G Loss: 1.4215013980865479\n",
      "Epoch: 9/50, Step: 9200, D Loss: 1.1508185863494873, G Loss: 1.220603108406067\n",
      "Epoch: 9/50, Step: 9300, D Loss: 1.1633039712905884, G Loss: 1.3579373359680176\n",
      "Epoch: 10/50, Step: 9400, D Loss: 1.1997263431549072, G Loss: 1.1214616298675537\n",
      "Epoch: 10/50, Step: 9500, D Loss: 1.1263341903686523, G Loss: 1.1592438220977783\n",
      "Epoch: 10/50, Step: 9600, D Loss: 1.1813852787017822, G Loss: 1.194042444229126\n",
      "Epoch: 10/50, Step: 9700, D Loss: 1.3478076457977295, G Loss: 0.6238917112350464\n",
      "Epoch: 10/50, Step: 9800, D Loss: 1.0859375, G Loss: 1.2956181764602661\n",
      "Epoch: 10/50, Step: 9900, D Loss: 1.3077058792114258, G Loss: 0.6852781176567078\n",
      "Epoch: 10/50, Step: 10000, D Loss: 1.2989614009857178, G Loss: 1.5063362121582031\n",
      "Epoch: 10/50, Step: 10100, D Loss: 1.2180774211883545, G Loss: 0.47168949246406555\n",
      "Epoch: 10/50, Step: 10200, D Loss: 1.2757370471954346, G Loss: 1.0123518705368042\n",
      "Epoch: 10/50, Step: 10300, D Loss: 1.206282377243042, G Loss: 0.7624193429946899\n",
      "Epoch: 11/50, Step: 10400, D Loss: 1.2450745105743408, G Loss: 0.7275304794311523\n",
      "Epoch: 11/50, Step: 10500, D Loss: 1.0599262714385986, G Loss: 0.9695977568626404\n",
      "Epoch: 11/50, Step: 10600, D Loss: 1.3188681602478027, G Loss: 1.4939640760421753\n",
      "Epoch: 11/50, Step: 10700, D Loss: 1.1798672676086426, G Loss: 1.0009769201278687\n",
      "Epoch: 11/50, Step: 10800, D Loss: 1.1076381206512451, G Loss: 1.2105268239974976\n",
      "Epoch: 11/50, Step: 10900, D Loss: 1.2261507511138916, G Loss: 0.6194207668304443\n",
      "Epoch: 11/50, Step: 11000, D Loss: 1.2070517539978027, G Loss: 0.7739561200141907\n",
      "Epoch: 11/50, Step: 11100, D Loss: 1.304227590560913, G Loss: 0.9899596571922302\n",
      "Epoch: 11/50, Step: 11200, D Loss: 1.286920428276062, G Loss: 0.8698447942733765\n",
      "Epoch: 12/50, Step: 11300, D Loss: 1.3144237995147705, G Loss: 1.5047122240066528\n",
      "Epoch: 12/50, Step: 11400, D Loss: 1.2122002840042114, G Loss: 0.9399086236953735\n",
      "Epoch: 12/50, Step: 11500, D Loss: 1.252776026725769, G Loss: 0.7726771831512451\n",
      "Epoch: 12/50, Step: 11600, D Loss: 1.2458808422088623, G Loss: 1.258838415145874\n",
      "Epoch: 12/50, Step: 11700, D Loss: 1.1143779754638672, G Loss: 1.146378993988037\n",
      "Epoch: 12/50, Step: 11800, D Loss: 1.237128734588623, G Loss: 0.9505376815795898\n",
      "Epoch: 12/50, Step: 11900, D Loss: 1.2431498765945435, G Loss: 0.9855661392211914\n",
      "Epoch: 12/50, Step: 12000, D Loss: 1.2563393115997314, G Loss: 1.2540241479873657\n",
      "Epoch: 12/50, Step: 12100, D Loss: 1.2911789417266846, G Loss: 1.4705086946487427\n",
      "Epoch: 13/50, Step: 12200, D Loss: 1.2051054239273071, G Loss: 0.6534929275512695\n",
      "Epoch: 13/50, Step: 12300, D Loss: 1.2567555904388428, G Loss: 0.6974103450775146\n",
      "Epoch: 13/50, Step: 12400, D Loss: 1.1519927978515625, G Loss: 0.8348057866096497\n",
      "Epoch: 13/50, Step: 12500, D Loss: 1.1667532920837402, G Loss: 0.8974984884262085\n",
      "Epoch: 13/50, Step: 12600, D Loss: 1.2763395309448242, G Loss: 0.5674263834953308\n",
      "Epoch: 13/50, Step: 12700, D Loss: 1.108276605606079, G Loss: 0.934748649597168\n",
      "Epoch: 13/50, Step: 12800, D Loss: 1.2116602659225464, G Loss: 0.9570163488388062\n",
      "Epoch: 13/50, Step: 12900, D Loss: 1.1660997867584229, G Loss: 0.9311370253562927\n",
      "Epoch: 13/50, Step: 13000, D Loss: 1.2295265197753906, G Loss: 0.6921029090881348\n",
      "Epoch: 13/50, Step: 13100, D Loss: 1.292984962463379, G Loss: 1.0119906663894653\n",
      "Epoch: 14/50, Step: 13200, D Loss: 1.2255140542984009, G Loss: 0.967882513999939\n",
      "Epoch: 14/50, Step: 13300, D Loss: 1.0844985246658325, G Loss: 0.8316627740859985\n",
      "Epoch: 14/50, Step: 13400, D Loss: 1.218727946281433, G Loss: 0.7387588024139404\n",
      "Epoch: 14/50, Step: 13500, D Loss: 1.1911362409591675, G Loss: 0.9198406934738159\n",
      "Epoch: 14/50, Step: 13600, D Loss: 1.3234590291976929, G Loss: 0.5568742752075195\n",
      "Epoch: 14/50, Step: 13700, D Loss: 1.1606587171554565, G Loss: 0.9038999676704407\n",
      "Epoch: 14/50, Step: 13800, D Loss: 1.2962044477462769, G Loss: 1.1339683532714844\n",
      "Epoch: 14/50, Step: 13900, D Loss: 1.1385843753814697, G Loss: 1.0538697242736816\n",
      "Epoch: 14/50, Step: 14000, D Loss: 1.2061419486999512, G Loss: 1.0078059434890747\n",
      "Epoch: 15/50, Step: 14100, D Loss: 1.2121951580047607, G Loss: 0.680861234664917\n",
      "Epoch: 15/50, Step: 14200, D Loss: 1.2515984773635864, G Loss: 0.9352184534072876\n",
      "Epoch: 15/50, Step: 14300, D Loss: 1.2181270122528076, G Loss: 0.8042237758636475\n",
      "Epoch: 15/50, Step: 14400, D Loss: 1.171113133430481, G Loss: 1.0093777179718018\n",
      "Epoch: 15/50, Step: 14500, D Loss: 1.238211750984192, G Loss: 0.8371841907501221\n",
      "Epoch: 15/50, Step: 14600, D Loss: 1.24653959274292, G Loss: 0.7134132981300354\n",
      "Epoch: 15/50, Step: 14700, D Loss: 1.2246887683868408, G Loss: 0.6499658226966858\n",
      "Epoch: 15/50, Step: 14800, D Loss: 1.1947600841522217, G Loss: 1.146819829940796\n",
      "Epoch: 15/50, Step: 14900, D Loss: 1.2127631902694702, G Loss: 1.1151907444000244\n",
      "Epoch: 16/50, Step: 15000, D Loss: 1.2064951658248901, G Loss: 1.2785468101501465\n",
      "Epoch: 16/50, Step: 15100, D Loss: 1.3463020324707031, G Loss: 0.6142204403877258\n",
      "Epoch: 16/50, Step: 15200, D Loss: 1.2586911916732788, G Loss: 0.7501577734947205\n",
      "Epoch: 16/50, Step: 15300, D Loss: 1.2823126316070557, G Loss: 1.2130208015441895\n",
      "Epoch: 16/50, Step: 15400, D Loss: 1.2287981510162354, G Loss: 1.093631386756897\n",
      "Epoch: 16/50, Step: 15500, D Loss: 1.1711496114730835, G Loss: 0.9895340204238892\n",
      "Epoch: 16/50, Step: 15600, D Loss: 1.1650619506835938, G Loss: 0.8968183398246765\n",
      "Epoch: 16/50, Step: 15700, D Loss: 1.2129615545272827, G Loss: 0.7020413875579834\n",
      "Epoch: 16/50, Step: 15800, D Loss: 1.1387689113616943, G Loss: 1.0764628648757935\n",
      "Epoch: 16/50, Step: 15900, D Loss: 1.2120182514190674, G Loss: 0.9321194887161255\n",
      "Epoch: 17/50, Step: 16000, D Loss: 1.2922120094299316, G Loss: 0.6163793802261353\n",
      "Epoch: 17/50, Step: 16100, D Loss: 1.1861939430236816, G Loss: 0.9093751907348633\n",
      "Epoch: 17/50, Step: 16200, D Loss: 1.2723637819290161, G Loss: 0.8735350370407104\n",
      "Epoch: 17/50, Step: 16300, D Loss: 1.171302080154419, G Loss: 0.8182768225669861\n",
      "Epoch: 17/50, Step: 16400, D Loss: 1.315756916999817, G Loss: 0.7028841376304626\n",
      "Epoch: 17/50, Step: 16500, D Loss: 1.2511272430419922, G Loss: 0.6821578741073608\n",
      "Epoch: 17/50, Step: 16600, D Loss: 1.2290165424346924, G Loss: 0.9316233992576599\n",
      "Epoch: 17/50, Step: 16700, D Loss: 1.2666313648223877, G Loss: 1.166621208190918\n",
      "Epoch: 17/50, Step: 16800, D Loss: 1.1714509725570679, G Loss: 0.7990235686302185\n",
      "Epoch: 18/50, Step: 16900, D Loss: 1.2253040075302124, G Loss: 0.9877630472183228\n",
      "Epoch: 18/50, Step: 17000, D Loss: 1.2374818325042725, G Loss: 1.0566229820251465\n",
      "Epoch: 18/50, Step: 17100, D Loss: 1.207651138305664, G Loss: 1.0561139583587646\n",
      "Epoch: 18/50, Step: 17200, D Loss: 1.2061715126037598, G Loss: 1.123403549194336\n",
      "Epoch: 18/50, Step: 17300, D Loss: 1.412967324256897, G Loss: 1.6116868257522583\n",
      "Epoch: 18/50, Step: 17400, D Loss: 1.2520060539245605, G Loss: 1.1235551834106445\n",
      "Epoch: 18/50, Step: 17500, D Loss: 1.209571361541748, G Loss: 1.0765256881713867\n",
      "Epoch: 18/50, Step: 17600, D Loss: 1.1861095428466797, G Loss: 0.8386883735656738\n",
      "Epoch: 18/50, Step: 17700, D Loss: 1.2936694622039795, G Loss: 1.1204475164413452\n",
      "Epoch: 18/50, Step: 17800, D Loss: 1.2481777667999268, G Loss: 1.3013839721679688\n",
      "Epoch: 19/50, Step: 17900, D Loss: 1.209465742111206, G Loss: 0.9353631734848022\n",
      "Epoch: 19/50, Step: 18000, D Loss: 1.2336809635162354, G Loss: 0.8634388446807861\n",
      "Epoch: 19/50, Step: 18100, D Loss: 1.1889309883117676, G Loss: 0.88236403465271\n",
      "Epoch: 19/50, Step: 18200, D Loss: 1.3164339065551758, G Loss: 1.080313801765442\n",
      "Epoch: 19/50, Step: 18300, D Loss: 1.1889328956604004, G Loss: 1.1285393238067627\n",
      "Epoch: 19/50, Step: 18400, D Loss: 1.215492844581604, G Loss: 1.1902813911437988\n",
      "Epoch: 19/50, Step: 18500, D Loss: 1.2398638725280762, G Loss: 1.2349636554718018\n",
      "Epoch: 19/50, Step: 18600, D Loss: 1.188855528831482, G Loss: 0.6755977869033813\n",
      "Epoch: 19/50, Step: 18700, D Loss: 1.2970634698867798, G Loss: 1.1354739665985107\n",
      "Epoch: 20/50, Step: 18800, D Loss: 1.245138168334961, G Loss: 0.9864693880081177\n",
      "Epoch: 20/50, Step: 18900, D Loss: 1.2378497123718262, G Loss: 0.74561607837677\n",
      "Epoch: 20/50, Step: 19000, D Loss: 1.304497241973877, G Loss: 0.831098735332489\n",
      "Epoch: 20/50, Step: 19100, D Loss: 1.2336735725402832, G Loss: 0.9046992063522339\n",
      "Epoch: 20/50, Step: 19200, D Loss: 1.1845277547836304, G Loss: 0.9098901748657227\n",
      "Epoch: 20/50, Step: 19300, D Loss: 1.2705830335617065, G Loss: 0.8678758144378662\n",
      "Epoch: 20/50, Step: 19400, D Loss: 1.180762767791748, G Loss: 0.797465443611145\n",
      "Epoch: 20/50, Step: 19500, D Loss: 1.2005583047866821, G Loss: 0.8377618789672852\n",
      "Epoch: 20/50, Step: 19600, D Loss: 1.1986534595489502, G Loss: 0.984920084476471\n",
      "Epoch: 21/50, Step: 19700, D Loss: 1.1216466426849365, G Loss: 0.9764318466186523\n",
      "Epoch: 21/50, Step: 19800, D Loss: 1.31438148021698, G Loss: 1.0256385803222656\n",
      "Epoch: 21/50, Step: 19900, D Loss: 1.2465825080871582, G Loss: 0.840914249420166\n",
      "Epoch: 21/50, Step: 20000, D Loss: 1.172004222869873, G Loss: 0.6754119396209717\n",
      "Epoch: 21/50, Step: 20100, D Loss: 1.2193400859832764, G Loss: 0.7821771502494812\n",
      "Epoch: 21/50, Step: 20200, D Loss: 1.3329802751541138, G Loss: 0.7424018979072571\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 21/50, Step: 20300, D Loss: 1.1523170471191406, G Loss: 0.8529489636421204\n",
      "Epoch: 21/50, Step: 20400, D Loss: 1.2152249813079834, G Loss: 0.9573037624359131\n",
      "Epoch: 21/50, Step: 20500, D Loss: 1.2426687479019165, G Loss: 0.9399197101593018\n",
      "Epoch: 21/50, Step: 20600, D Loss: 1.136208415031433, G Loss: 0.9436594843864441\n",
      "Epoch: 22/50, Step: 20700, D Loss: 1.1527689695358276, G Loss: 0.9725241661071777\n",
      "Epoch: 22/50, Step: 20800, D Loss: 1.192220687866211, G Loss: 0.7522275447845459\n",
      "Epoch: 22/50, Step: 20900, D Loss: 1.346964955329895, G Loss: 0.5827013254165649\n",
      "Epoch: 22/50, Step: 21000, D Loss: 1.22269868850708, G Loss: 0.8253107070922852\n",
      "Epoch: 22/50, Step: 21100, D Loss: 1.3469669818878174, G Loss: 1.181819200515747\n",
      "Epoch: 22/50, Step: 21200, D Loss: 1.265282154083252, G Loss: 0.6865647435188293\n",
      "Epoch: 22/50, Step: 21300, D Loss: 1.2427411079406738, G Loss: 0.7111386060714722\n",
      "Epoch: 22/50, Step: 21400, D Loss: 1.1825366020202637, G Loss: 1.1427326202392578\n",
      "Epoch: 22/50, Step: 21500, D Loss: 1.2942395210266113, G Loss: 0.8325639367103577\n",
      "Epoch: 23/50, Step: 21600, D Loss: 1.2424407005310059, G Loss: 1.2793357372283936\n",
      "Epoch: 23/50, Step: 21700, D Loss: 1.2275645732879639, G Loss: 1.0119702816009521\n",
      "Epoch: 23/50, Step: 21800, D Loss: 1.2892506122589111, G Loss: 1.2175573110580444\n",
      "Epoch: 23/50, Step: 21900, D Loss: 1.241182804107666, G Loss: 0.9219717383384705\n",
      "Epoch: 23/50, Step: 22000, D Loss: 1.2665042877197266, G Loss: 0.7414356470108032\n",
      "Epoch: 23/50, Step: 22100, D Loss: 1.19146728515625, G Loss: 0.9650406837463379\n",
      "Epoch: 23/50, Step: 22200, D Loss: 1.1858857870101929, G Loss: 0.7685431241989136\n",
      "Epoch: 23/50, Step: 22300, D Loss: 1.2208094596862793, G Loss: 1.2683500051498413\n",
      "Epoch: 23/50, Step: 22400, D Loss: 1.1641271114349365, G Loss: 1.1019322872161865\n",
      "Epoch: 24/50, Step: 22500, D Loss: 1.1262972354888916, G Loss: 0.8867220878601074\n",
      "Epoch: 24/50, Step: 22600, D Loss: 1.3060945272445679, G Loss: 0.9167486429214478\n",
      "Epoch: 24/50, Step: 22700, D Loss: 1.1947518587112427, G Loss: 1.0227892398834229\n",
      "Epoch: 24/50, Step: 22800, D Loss: 1.3056048154830933, G Loss: 0.7716820240020752\n",
      "Epoch: 24/50, Step: 22900, D Loss: 1.1642104387283325, G Loss: 0.8623181581497192\n",
      "Epoch: 24/50, Step: 23000, D Loss: 1.2329914569854736, G Loss: 1.084620714187622\n",
      "Epoch: 24/50, Step: 23100, D Loss: 1.2427608966827393, G Loss: 1.3022964000701904\n",
      "Epoch: 24/50, Step: 23200, D Loss: 1.277015209197998, G Loss: 0.7820996642112732\n",
      "Epoch: 24/50, Step: 23300, D Loss: 1.1886347532272339, G Loss: 1.0851091146469116\n",
      "Epoch: 24/50, Step: 23400, D Loss: 1.33418607711792, G Loss: 0.7163116931915283\n",
      "Epoch: 25/50, Step: 23500, D Loss: 1.2002240419387817, G Loss: 0.9491722583770752\n",
      "Epoch: 25/50, Step: 23600, D Loss: 1.1755995750427246, G Loss: 0.9712936878204346\n",
      "Epoch: 25/50, Step: 23700, D Loss: 1.1856290102005005, G Loss: 1.0524955987930298\n",
      "Epoch: 25/50, Step: 23800, D Loss: 1.1362779140472412, G Loss: 0.9094306826591492\n",
      "Epoch: 25/50, Step: 23900, D Loss: 1.2238335609436035, G Loss: 0.7942941784858704\n",
      "Epoch: 25/50, Step: 24000, D Loss: 1.2610427141189575, G Loss: 1.0142638683319092\n",
      "Epoch: 25/50, Step: 24100, D Loss: 1.240368127822876, G Loss: 0.907865047454834\n",
      "Epoch: 25/50, Step: 24200, D Loss: 1.2110683917999268, G Loss: 0.9124535322189331\n",
      "Epoch: 25/50, Step: 24300, D Loss: 1.204123854637146, G Loss: 0.9643872380256653\n",
      "Epoch: 26/50, Step: 24400, D Loss: 1.2399346828460693, G Loss: 0.7978558540344238\n",
      "Epoch: 26/50, Step: 24500, D Loss: 1.227188229560852, G Loss: 1.0355265140533447\n",
      "Epoch: 26/50, Step: 24600, D Loss: 1.4061017036437988, G Loss: 1.3225953578948975\n",
      "Epoch: 26/50, Step: 24700, D Loss: 1.1357053518295288, G Loss: 0.9045677185058594\n",
      "Epoch: 26/50, Step: 24800, D Loss: 1.3007655143737793, G Loss: 0.8942601680755615\n",
      "Epoch: 26/50, Step: 24900, D Loss: 1.2068142890930176, G Loss: 0.913966178894043\n",
      "Epoch: 26/50, Step: 25000, D Loss: 1.2416528463363647, G Loss: 0.84712153673172\n",
      "Epoch: 26/50, Step: 25100, D Loss: 1.2308399677276611, G Loss: 1.1149427890777588\n",
      "Epoch: 26/50, Step: 25200, D Loss: 1.314035415649414, G Loss: 0.7738482356071472\n",
      "Epoch: 27/50, Step: 25300, D Loss: 1.1078574657440186, G Loss: 1.0051829814910889\n",
      "Epoch: 27/50, Step: 25400, D Loss: 1.2352933883666992, G Loss: 0.9158613085746765\n",
      "Epoch: 27/50, Step: 25500, D Loss: 1.167332410812378, G Loss: 0.9380961656570435\n",
      "Epoch: 27/50, Step: 25600, D Loss: 1.3083356618881226, G Loss: 0.7295217514038086\n",
      "Epoch: 27/50, Step: 25700, D Loss: 1.259796142578125, G Loss: 0.7841469645500183\n",
      "Epoch: 27/50, Step: 25800, D Loss: 1.1185212135314941, G Loss: 0.7873911261558533\n",
      "Epoch: 27/50, Step: 25900, D Loss: 1.3450413942337036, G Loss: 0.5948001146316528\n",
      "Epoch: 27/50, Step: 26000, D Loss: 1.1676390171051025, G Loss: 0.8275951147079468\n",
      "Epoch: 27/50, Step: 26100, D Loss: 1.2261372804641724, G Loss: 0.9261521100997925\n",
      "Epoch: 27/50, Step: 26200, D Loss: 1.2265046834945679, G Loss: 0.9005173444747925\n",
      "Epoch: 28/50, Step: 26300, D Loss: 1.2047514915466309, G Loss: 1.162658452987671\n",
      "Epoch: 28/50, Step: 26400, D Loss: 1.3190675973892212, G Loss: 0.8922451734542847\n",
      "Epoch: 28/50, Step: 26500, D Loss: 1.24493408203125, G Loss: 0.6407414674758911\n",
      "Epoch: 28/50, Step: 26600, D Loss: 1.1801207065582275, G Loss: 0.9951067566871643\n",
      "Epoch: 28/50, Step: 26700, D Loss: 1.235087275505066, G Loss: 1.0938308238983154\n",
      "Epoch: 28/50, Step: 26800, D Loss: 1.1554946899414062, G Loss: 1.0331007242202759\n",
      "Epoch: 28/50, Step: 26900, D Loss: 1.2732802629470825, G Loss: 1.052351713180542\n",
      "Epoch: 28/50, Step: 27000, D Loss: 1.1889671087265015, G Loss: 1.1222500801086426\n",
      "Epoch: 28/50, Step: 27100, D Loss: 1.1423007249832153, G Loss: 1.049009084701538\n",
      "Epoch: 29/50, Step: 27200, D Loss: 1.1485176086425781, G Loss: 1.0165256261825562\n",
      "Epoch: 29/50, Step: 27300, D Loss: 1.2299809455871582, G Loss: 1.1101101636886597\n",
      "Epoch: 29/50, Step: 27400, D Loss: 1.1807870864868164, G Loss: 0.9193254709243774\n",
      "Epoch: 29/50, Step: 27500, D Loss: 1.3059940338134766, G Loss: 0.6988204717636108\n",
      "Epoch: 29/50, Step: 27600, D Loss: 1.3216053247451782, G Loss: 0.6762109994888306\n",
      "Epoch: 29/50, Step: 27700, D Loss: 1.1857885122299194, G Loss: 1.2161445617675781\n",
      "Epoch: 29/50, Step: 27800, D Loss: 1.1301485300064087, G Loss: 0.9886313676834106\n",
      "Epoch: 29/50, Step: 27900, D Loss: 1.293254017829895, G Loss: 0.7719382643699646\n",
      "Epoch: 29/50, Step: 28000, D Loss: 1.2084364891052246, G Loss: 0.9887571334838867\n",
      "Epoch: 29/50, Step: 28100, D Loss: 1.2136424779891968, G Loss: 0.8568726778030396\n",
      "Epoch: 30/50, Step: 28200, D Loss: 1.2700717449188232, G Loss: 0.857607364654541\n",
      "Epoch: 30/50, Step: 28300, D Loss: 1.1744557619094849, G Loss: 0.8385840058326721\n",
      "Epoch: 30/50, Step: 28400, D Loss: 1.1476036310195923, G Loss: 0.8597829341888428\n",
      "Epoch: 30/50, Step: 28500, D Loss: 1.113935947418213, G Loss: 0.8333016037940979\n",
      "Epoch: 30/50, Step: 28600, D Loss: 1.2478114366531372, G Loss: 0.764983057975769\n",
      "Epoch: 30/50, Step: 28700, D Loss: 1.2396581172943115, G Loss: 0.8896706700325012\n",
      "Epoch: 30/50, Step: 28800, D Loss: 1.3974761962890625, G Loss: 0.677495002746582\n",
      "Epoch: 30/50, Step: 28900, D Loss: 1.2402758598327637, G Loss: 0.7176233530044556\n",
      "Epoch: 30/50, Step: 29000, D Loss: 1.2685775756835938, G Loss: 0.7504111528396606\n",
      "Epoch: 31/50, Step: 29100, D Loss: 1.3303475379943848, G Loss: 0.9262601137161255\n",
      "Epoch: 31/50, Step: 29200, D Loss: 1.19620943069458, G Loss: 0.9128658175468445\n",
      "Epoch: 31/50, Step: 29300, D Loss: 1.1901613473892212, G Loss: 0.8004170656204224\n",
      "Epoch: 31/50, Step: 29400, D Loss: 1.1972190141677856, G Loss: 0.6942418813705444\n",
      "Epoch: 31/50, Step: 29500, D Loss: 1.1806056499481201, G Loss: 1.1498284339904785\n",
      "Epoch: 31/50, Step: 29600, D Loss: 1.2003148794174194, G Loss: 0.8861392736434937\n",
      "Epoch: 31/50, Step: 29700, D Loss: 1.2424616813659668, G Loss: 1.0172407627105713\n",
      "Epoch: 31/50, Step: 29800, D Loss: 1.2472009658813477, G Loss: 1.0302460193634033\n",
      "Epoch: 31/50, Step: 29900, D Loss: 1.202374815940857, G Loss: 0.7921326160430908\n",
      "Epoch: 32/50, Step: 30000, D Loss: 1.258671522140503, G Loss: 0.7761672735214233\n",
      "Epoch: 32/50, Step: 30100, D Loss: 1.2815885543823242, G Loss: 0.8146438598632812\n",
      "Epoch: 32/50, Step: 30200, D Loss: 1.1516001224517822, G Loss: 0.8883209824562073\n",
      "Epoch: 32/50, Step: 30300, D Loss: 1.2426934242248535, G Loss: 0.7430719137191772\n",
      "Epoch: 32/50, Step: 30400, D Loss: 1.2653920650482178, G Loss: 1.280940294265747\n",
      "Epoch: 32/50, Step: 30500, D Loss: 1.1918632984161377, G Loss: 0.8606685996055603\n",
      "Epoch: 32/50, Step: 30600, D Loss: 1.2837167978286743, G Loss: 1.2054851055145264\n",
      "Epoch: 32/50, Step: 30700, D Loss: 1.3178791999816895, G Loss: 0.5360366702079773\n",
      "Epoch: 32/50, Step: 30800, D Loss: 1.2775838375091553, G Loss: 0.9698480367660522\n",
      "Epoch: 32/50, Step: 30900, D Loss: 1.3030204772949219, G Loss: 1.3201215267181396\n",
      "Epoch: 33/50, Step: 31000, D Loss: 1.2283589839935303, G Loss: 1.5156443119049072\n",
      "Epoch: 33/50, Step: 31100, D Loss: 1.3489444255828857, G Loss: 0.7787050604820251\n",
      "Epoch: 33/50, Step: 31200, D Loss: 1.1748545169830322, G Loss: 1.1267893314361572\n",
      "Epoch: 33/50, Step: 31300, D Loss: 1.2532224655151367, G Loss: 1.0518677234649658\n",
      "Epoch: 33/50, Step: 31400, D Loss: 1.3471250534057617, G Loss: 1.1470972299575806\n",
      "Epoch: 33/50, Step: 31500, D Loss: 1.2148808240890503, G Loss: 0.7423912286758423\n",
      "Epoch: 33/50, Step: 31600, D Loss: 1.205531120300293, G Loss: 0.9363947510719299\n",
      "Epoch: 33/50, Step: 31700, D Loss: 1.2643693685531616, G Loss: 0.9625366926193237\n",
      "Epoch: 33/50, Step: 31800, D Loss: 1.2066423892974854, G Loss: 0.8550148010253906\n",
      "Epoch: 34/50, Step: 31900, D Loss: 1.1639618873596191, G Loss: 0.9063175320625305\n",
      "Epoch: 34/50, Step: 32000, D Loss: 1.231210470199585, G Loss: 0.8845882415771484\n",
      "Epoch: 34/50, Step: 32100, D Loss: 1.2314238548278809, G Loss: 0.9917536377906799\n",
      "Epoch: 34/50, Step: 32200, D Loss: 1.232785940170288, G Loss: 0.8000027537345886\n",
      "Epoch: 34/50, Step: 32300, D Loss: 1.216137409210205, G Loss: 0.7989095449447632\n",
      "Epoch: 34/50, Step: 32400, D Loss: 1.1525428295135498, G Loss: 0.8272444605827332\n",
      "Epoch: 34/50, Step: 32500, D Loss: 1.2046626806259155, G Loss: 0.8209885358810425\n",
      "Epoch: 34/50, Step: 32600, D Loss: 1.2597019672393799, G Loss: 1.2011444568634033\n",
      "Epoch: 34/50, Step: 32700, D Loss: 1.4396988153457642, G Loss: 1.518322467803955\n",
      "Epoch: 35/50, Step: 32800, D Loss: 1.2250580787658691, G Loss: 0.7378736734390259\n",
      "Epoch: 35/50, Step: 32900, D Loss: 1.2016754150390625, G Loss: 1.3255627155303955\n",
      "Epoch: 35/50, Step: 33000, D Loss: 1.1598408222198486, G Loss: 0.9177361726760864\n",
      "Epoch: 35/50, Step: 33100, D Loss: 1.2182292938232422, G Loss: 1.0636540651321411\n",
      "Epoch: 35/50, Step: 33200, D Loss: 1.2980656623840332, G Loss: 0.9482142925262451\n",
      "Epoch: 35/50, Step: 33300, D Loss: 1.3540945053100586, G Loss: 1.0627357959747314\n",
      "Epoch: 35/50, Step: 33400, D Loss: 1.1942760944366455, G Loss: 0.7118359804153442\n",
      "Epoch: 35/50, Step: 33500, D Loss: 1.1951991319656372, G Loss: 0.8601397275924683\n",
      "Epoch: 35/50, Step: 33600, D Loss: 1.2576578855514526, G Loss: 0.9416972994804382\n",
      "Epoch: 35/50, Step: 33700, D Loss: 1.209525227546692, G Loss: 1.0577778816223145\n",
      "Epoch: 36/50, Step: 33800, D Loss: 1.204667329788208, G Loss: 1.0255203247070312\n",
      "Epoch: 36/50, Step: 33900, D Loss: 1.1989684104919434, G Loss: 0.9873369932174683\n",
      "Epoch: 36/50, Step: 34000, D Loss: 1.3067703247070312, G Loss: 1.1465823650360107\n",
      "Epoch: 36/50, Step: 34100, D Loss: 1.2837764024734497, G Loss: 1.0072802305221558\n",
      "Epoch: 36/50, Step: 34200, D Loss: 1.3044425249099731, G Loss: 1.156259298324585\n",
      "Epoch: 36/50, Step: 34300, D Loss: 1.2056188583374023, G Loss: 1.0182381868362427\n",
      "Epoch: 36/50, Step: 34400, D Loss: 1.2643738985061646, G Loss: 0.9614315032958984\n",
      "Epoch: 36/50, Step: 34500, D Loss: 1.3192930221557617, G Loss: 0.8524658679962158\n",
      "Epoch: 36/50, Step: 34600, D Loss: 1.2528836727142334, G Loss: 1.2799036502838135\n",
      "Epoch: 37/50, Step: 34700, D Loss: 1.2573869228363037, G Loss: 0.8599958419799805\n",
      "Epoch: 37/50, Step: 34800, D Loss: 1.1725984811782837, G Loss: 1.3081600666046143\n",
      "Epoch: 37/50, Step: 34900, D Loss: 1.25221586227417, G Loss: 0.8222669363021851\n",
      "Epoch: 37/50, Step: 35000, D Loss: 1.1952428817749023, G Loss: 1.0186481475830078\n",
      "Epoch: 37/50, Step: 35100, D Loss: 1.1851698160171509, G Loss: 0.9595387578010559\n",
      "Epoch: 37/50, Step: 35200, D Loss: 1.247169852256775, G Loss: 0.7011709213256836\n",
      "Epoch: 37/50, Step: 35300, D Loss: 1.2376629114151, G Loss: 1.092707633972168\n",
      "Epoch: 37/50, Step: 35400, D Loss: 1.2605233192443848, G Loss: 0.9264761209487915\n",
      "Epoch: 37/50, Step: 35500, D Loss: 1.1233935356140137, G Loss: 0.964928388595581\n",
      "Epoch: 37/50, Step: 35600, D Loss: 1.2031008005142212, G Loss: 0.9948196411132812\n",
      "Epoch: 38/50, Step: 35700, D Loss: 1.2745552062988281, G Loss: 0.9842804074287415\n",
      "Epoch: 38/50, Step: 35800, D Loss: 1.3056312799453735, G Loss: 0.7977616786956787\n",
      "Epoch: 38/50, Step: 35900, D Loss: 1.1895256042480469, G Loss: 1.0907657146453857\n",
      "Epoch: 38/50, Step: 36000, D Loss: 1.2979581356048584, G Loss: 0.7753040194511414\n",
      "Epoch: 38/50, Step: 36100, D Loss: 1.3153116703033447, G Loss: 1.3459755182266235\n",
      "Epoch: 38/50, Step: 36200, D Loss: 1.1623234748840332, G Loss: 1.046003818511963\n",
      "Epoch: 38/50, Step: 36300, D Loss: 1.2046648263931274, G Loss: 0.9625626802444458\n",
      "Epoch: 38/50, Step: 36400, D Loss: 1.1874940395355225, G Loss: 1.1779396533966064\n",
      "Epoch: 38/50, Step: 36500, D Loss: 1.1999504566192627, G Loss: 1.027659296989441\n",
      "Epoch: 39/50, Step: 36600, D Loss: 1.2035362720489502, G Loss: 0.8651690483093262\n",
      "Epoch: 39/50, Step: 36700, D Loss: 1.1562621593475342, G Loss: 0.9754357933998108\n",
      "Epoch: 39/50, Step: 36800, D Loss: 1.251892328262329, G Loss: 0.5901049375534058\n",
      "Epoch: 39/50, Step: 36900, D Loss: 1.277130126953125, G Loss: 0.8790773749351501\n",
      "Epoch: 39/50, Step: 37000, D Loss: 1.212507724761963, G Loss: 1.150827407836914\n",
      "Epoch: 39/50, Step: 37100, D Loss: 1.2381174564361572, G Loss: 1.063865303993225\n",
      "Epoch: 39/50, Step: 37200, D Loss: 1.2560280561447144, G Loss: 0.9694295525550842\n",
      "Epoch: 39/50, Step: 37300, D Loss: 1.225442886352539, G Loss: 0.8690224885940552\n",
      "Epoch: 39/50, Step: 37400, D Loss: 1.2482178211212158, G Loss: 0.9233623743057251\n",
      "Epoch: 40/50, Step: 37500, D Loss: 1.1405808925628662, G Loss: 1.0717651844024658\n",
      "Epoch: 40/50, Step: 37600, D Loss: 1.3234984874725342, G Loss: 1.1344659328460693\n",
      "Epoch: 40/50, Step: 37700, D Loss: 1.1851081848144531, G Loss: 0.9512386918067932\n",
      "Epoch: 40/50, Step: 37800, D Loss: 1.2702488899230957, G Loss: 1.276825189590454\n",
      "Epoch: 40/50, Step: 37900, D Loss: 1.2990796566009521, G Loss: 1.0228497982025146\n",
      "Epoch: 40/50, Step: 38000, D Loss: 1.1657326221466064, G Loss: 1.331925630569458\n",
      "Epoch: 40/50, Step: 38100, D Loss: 1.2448980808258057, G Loss: 0.9437596797943115\n",
      "Epoch: 40/50, Step: 38200, D Loss: 1.361630916595459, G Loss: 0.900732159614563\n",
      "Epoch: 40/50, Step: 38300, D Loss: 1.139716625213623, G Loss: 0.7612392902374268\n",
      "Epoch: 40/50, Step: 38400, D Loss: 1.206517219543457, G Loss: 1.153896689414978\n",
      "Epoch: 41/50, Step: 38500, D Loss: 1.1179249286651611, G Loss: 1.0247217416763306\n",
      "Epoch: 41/50, Step: 38600, D Loss: 1.2161377668380737, G Loss: 0.9279412627220154\n",
      "Epoch: 41/50, Step: 38700, D Loss: 1.2111742496490479, G Loss: 0.7811870574951172\n",
      "Epoch: 41/50, Step: 38800, D Loss: 1.2445619106292725, G Loss: 0.9319475889205933\n",
      "Epoch: 41/50, Step: 38900, D Loss: 1.3297486305236816, G Loss: 0.7641939520835876\n",
      "Epoch: 41/50, Step: 39000, D Loss: 1.268157958984375, G Loss: 0.974425733089447\n",
      "Epoch: 41/50, Step: 39100, D Loss: 1.3058664798736572, G Loss: 0.7416825294494629\n",
      "Epoch: 41/50, Step: 39200, D Loss: 1.2750303745269775, G Loss: 1.0587196350097656\n",
      "Epoch: 41/50, Step: 39300, D Loss: 1.285602331161499, G Loss: 1.0798803567886353\n",
      "Epoch: 42/50, Step: 39400, D Loss: 1.1466481685638428, G Loss: 0.8888238072395325\n",
      "Epoch: 42/50, Step: 39500, D Loss: 1.2985601425170898, G Loss: 0.857285737991333\n",
      "Epoch: 42/50, Step: 39600, D Loss: 1.2886089086532593, G Loss: 1.0050108432769775\n",
      "Epoch: 42/50, Step: 39700, D Loss: 1.0997414588928223, G Loss: 1.1347441673278809\n",
      "Epoch: 42/50, Step: 39800, D Loss: 1.350433588027954, G Loss: 1.3179497718811035\n",
      "Epoch: 42/50, Step: 39900, D Loss: 1.2715165615081787, G Loss: 0.878556489944458\n",
      "Epoch: 42/50, Step: 40000, D Loss: 1.173454761505127, G Loss: 0.6953525543212891\n",
      "Epoch: 42/50, Step: 40100, D Loss: 1.2161270380020142, G Loss: 0.9230181574821472\n",
      "Epoch: 42/50, Step: 40200, D Loss: 1.2438760995864868, G Loss: 0.8983690142631531\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 43/50, Step: 40300, D Loss: 1.2671339511871338, G Loss: 0.8715578317642212\n",
      "Epoch: 43/50, Step: 40400, D Loss: 1.1369638442993164, G Loss: 0.9362446665763855\n",
      "Epoch: 43/50, Step: 40500, D Loss: 1.200079083442688, G Loss: 1.1189543008804321\n",
      "Epoch: 43/50, Step: 40600, D Loss: 1.3150529861450195, G Loss: 0.7439093589782715\n",
      "Epoch: 43/50, Step: 40700, D Loss: 1.2304681539535522, G Loss: 0.7889236807823181\n",
      "Epoch: 43/50, Step: 40800, D Loss: 1.3195154666900635, G Loss: 0.69771808385849\n",
      "Epoch: 43/50, Step: 40900, D Loss: 1.237633228302002, G Loss: 0.8163778781890869\n",
      "Epoch: 43/50, Step: 41000, D Loss: 1.2536416053771973, G Loss: 1.062206506729126\n",
      "Epoch: 43/50, Step: 41100, D Loss: 1.3234291076660156, G Loss: 0.8421131372451782\n",
      "Epoch: 43/50, Step: 41200, D Loss: 1.2624945640563965, G Loss: 1.0797982215881348\n",
      "Epoch: 44/50, Step: 41300, D Loss: 1.3040547370910645, G Loss: 0.8745784759521484\n",
      "Epoch: 44/50, Step: 41400, D Loss: 1.248758316040039, G Loss: 0.819257915019989\n",
      "Epoch: 44/50, Step: 41500, D Loss: 1.2484033107757568, G Loss: 0.8414314985275269\n",
      "Epoch: 44/50, Step: 41600, D Loss: 1.2775979042053223, G Loss: 1.2029948234558105\n",
      "Epoch: 44/50, Step: 41700, D Loss: 1.2064316272735596, G Loss: 0.9886420369148254\n",
      "Epoch: 44/50, Step: 41800, D Loss: 1.2541640996932983, G Loss: 1.1874451637268066\n",
      "Epoch: 44/50, Step: 41900, D Loss: 1.1576189994812012, G Loss: 0.7891532182693481\n",
      "Epoch: 44/50, Step: 42000, D Loss: 1.1962511539459229, G Loss: 1.0087721347808838\n",
      "Epoch: 44/50, Step: 42100, D Loss: 1.2239000797271729, G Loss: 1.244746208190918\n",
      "Epoch: 45/50, Step: 42200, D Loss: 1.1280311346054077, G Loss: 0.8784191608428955\n",
      "Epoch: 45/50, Step: 42300, D Loss: 1.1700245141983032, G Loss: 0.8256258964538574\n",
      "Epoch: 45/50, Step: 42400, D Loss: 1.2739894390106201, G Loss: 1.1052969694137573\n",
      "Epoch: 45/50, Step: 42500, D Loss: 1.1678037643432617, G Loss: 0.8961098790168762\n",
      "Epoch: 45/50, Step: 42600, D Loss: 1.2924749851226807, G Loss: 0.9189406633377075\n",
      "Epoch: 45/50, Step: 42700, D Loss: 1.2485487461090088, G Loss: 1.29738450050354\n",
      "Epoch: 45/50, Step: 42800, D Loss: 1.157265305519104, G Loss: 0.9963184595108032\n",
      "Epoch: 45/50, Step: 42900, D Loss: 1.2426986694335938, G Loss: 0.6674853563308716\n",
      "Epoch: 45/50, Step: 43000, D Loss: 1.2148418426513672, G Loss: 0.890792727470398\n",
      "Epoch: 45/50, Step: 43100, D Loss: 1.240767478942871, G Loss: 0.9478980302810669\n",
      "Epoch: 46/50, Step: 43200, D Loss: 1.2091747522354126, G Loss: 0.7080556154251099\n",
      "Epoch: 46/50, Step: 43300, D Loss: 1.2484796047210693, G Loss: 0.9084612131118774\n",
      "Epoch: 46/50, Step: 43400, D Loss: 1.2039605379104614, G Loss: 0.9033199548721313\n",
      "Epoch: 46/50, Step: 43500, D Loss: 1.1997287273406982, G Loss: 0.875247597694397\n",
      "Epoch: 46/50, Step: 43600, D Loss: 1.2544035911560059, G Loss: 0.7267091274261475\n",
      "Epoch: 46/50, Step: 43700, D Loss: 1.2010512351989746, G Loss: 0.5923932790756226\n",
      "Epoch: 46/50, Step: 43800, D Loss: 1.3050612211227417, G Loss: 0.8113607168197632\n",
      "Epoch: 46/50, Step: 43900, D Loss: 1.2905526161193848, G Loss: 1.0954461097717285\n",
      "Epoch: 46/50, Step: 44000, D Loss: 1.2154014110565186, G Loss: 0.7849315404891968\n",
      "Epoch: 47/50, Step: 44100, D Loss: 1.3073737621307373, G Loss: 1.1124365329742432\n",
      "Epoch: 47/50, Step: 44200, D Loss: 1.1890820264816284, G Loss: 0.87711501121521\n",
      "Epoch: 47/50, Step: 44300, D Loss: 1.249503493309021, G Loss: 1.555011510848999\n",
      "Epoch: 47/50, Step: 44400, D Loss: 1.1360602378845215, G Loss: 0.9276514053344727\n",
      "Epoch: 47/50, Step: 44500, D Loss: 1.2430593967437744, G Loss: 0.882981538772583\n",
      "Epoch: 47/50, Step: 44600, D Loss: 1.253286600112915, G Loss: 0.8704495429992676\n",
      "Epoch: 47/50, Step: 44700, D Loss: 1.2433907985687256, G Loss: 1.1349327564239502\n",
      "Epoch: 47/50, Step: 44800, D Loss: 1.2132601737976074, G Loss: 0.7072693705558777\n",
      "Epoch: 47/50, Step: 44900, D Loss: 1.1863152980804443, G Loss: 0.8685986995697021\n",
      "Epoch: 48/50, Step: 45000, D Loss: 1.220975637435913, G Loss: 0.999184787273407\n",
      "Epoch: 48/50, Step: 45100, D Loss: 1.2298252582550049, G Loss: 0.906997561454773\n",
      "Epoch: 48/50, Step: 45200, D Loss: 1.171065092086792, G Loss: 0.8764926791191101\n",
      "Epoch: 48/50, Step: 45300, D Loss: 1.254621982574463, G Loss: 1.121368646621704\n",
      "Epoch: 48/50, Step: 45400, D Loss: 1.123760461807251, G Loss: 1.102616786956787\n",
      "Epoch: 48/50, Step: 45500, D Loss: 1.1970198154449463, G Loss: 0.9131219983100891\n",
      "Epoch: 48/50, Step: 45600, D Loss: 1.235490322113037, G Loss: 1.0944409370422363\n",
      "Epoch: 48/50, Step: 45700, D Loss: 1.2333694696426392, G Loss: 0.8908747434616089\n",
      "Epoch: 48/50, Step: 45800, D Loss: 1.2430384159088135, G Loss: 0.9997708797454834\n",
      "Epoch: 48/50, Step: 45900, D Loss: 1.2540042400360107, G Loss: 0.8386843800544739\n",
      "Epoch: 49/50, Step: 46000, D Loss: 1.3032110929489136, G Loss: 0.7934931516647339\n",
      "Epoch: 49/50, Step: 46100, D Loss: 1.2122366428375244, G Loss: 0.6930758357048035\n",
      "Epoch: 49/50, Step: 46200, D Loss: 1.1820088624954224, G Loss: 0.9424937963485718\n",
      "Epoch: 49/50, Step: 46300, D Loss: 1.1937928199768066, G Loss: 1.2224006652832031\n",
      "Epoch: 49/50, Step: 46400, D Loss: 1.2443552017211914, G Loss: 0.9473430514335632\n",
      "Epoch: 49/50, Step: 46500, D Loss: 1.1523809432983398, G Loss: 0.7589169144630432\n",
      "Epoch: 49/50, Step: 46600, D Loss: 1.1736565828323364, G Loss: 1.3270739316940308\n",
      "Epoch: 49/50, Step: 46700, D Loss: 1.2918261289596558, G Loss: 0.9021583199501038\n",
      "Epoch: 49/50, Step: 46800, D Loss: 1.1745171546936035, G Loss: 0.9097059965133667\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(max_epoch):\n",
    "    for idx, (images, _) in enumerate(data_loader):\n",
    "        # Training Discriminator\n",
    "        x = images.to(DEVICE)\n",
    "        x_outputs = D(x)\n",
    "        D_x_loss = criterion(x_outputs, D_labels)\n",
    "\n",
    "        z = torch.randn(batch_size, n_noise).to(DEVICE)\n",
    "        z_outputs = D(G(z))\n",
    "        D_z_loss = criterion(z_outputs, D_fakes)\n",
    "        D_loss = D_x_loss + D_z_loss\n",
    "        \n",
    "        D.zero_grad()\n",
    "        D_loss.backward()\n",
    "        D_opt.step()\n",
    "\n",
    "        if step % n_critic == 0:\n",
    "            # Training Generator\n",
    "            z = torch.randn(batch_size, n_noise).to(DEVICE)\n",
    "            z_outputs = D(G(z))\n",
    "            G_loss = criterion(z_outputs, D_labels)\n",
    "\n",
    "            G.zero_grad()\n",
    "            G_loss.backward()\n",
    "            G_opt.step()\n",
    "        \n",
    "        if step % 500 == 0:\n",
    "            print('Epoch: {}/{}, Step: {}, D Loss: {}, G Loss: {}'.format(epoch, max_epoch, step, D_loss.item(), G_loss.item()))\n",
    "        \n",
    "        if step % 1000 == 0:\n",
    "            G.eval()\n",
    "            img = get_sample_image(G, n_noise)\n",
    "            imsave('samples/{}_step{}.jpg'.format(MODEL_NAME, str(step).zfill(3)), img, cmap='gray')\n",
    "            G.train()\n",
    "        step += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize Sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x269aa4a9278>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x269abf50ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# generation to image\n",
    "G.eval()\n",
    "imshow(get_sample_image(G, n_noise), cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Saving params.\n",
    "torch.save(D.state_dict(), 'D.pkl')\n",
    "torch.save(G.state_dict(), 'G.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
